package com.fanbai.score.common.Utils;

import android.content.Context;
import android.os.Environment;
import android.text.TextUtils;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class OtherUtils {

	/**
	 * 缓存目录地址
	 */
	public static String cacheDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/YDWL/cache";
	/**
	 * 照片拍摄目录
	 */
	public static String photoDir = Environment.getExternalStorageDirectory() + "/YDWL/photo";
	/**
	 * 图片压缩后的目录
	 */
	public static String simpleDir = Environment.getExternalStorageDirectory() + "/YDWL/simplePic";

	/**
	 * 判断是否已登录状态（如果否，则自动跳转登录页面）
	 * 
	 * @param ctx
	 * 
	 * @return
	 */
	public static boolean isLogin(Context ctx) {
		// 检查是否已登录
		String uid = SPUtils.with(ctx).get(SPUtils.KEY_UID, "");
		String token = SPUtils.with(ctx).get(SPUtils.KEY_TOKEN, "");
		if (TextUtils.isEmpty(uid) || TextUtils.isEmpty(token)) {
			return false;
		}
		return true;
	}

	/**
	 * 判断字符串是否为标准手机号，若不是则弹出提示并返回false
	 * 
	 * @param ctx
	 * @param text
	 * @return
	 */
	public static boolean isPhoneNum(Context ctx, String text) {
		if (TextUtils.isEmpty(text)) {
			ToastUtils.WarnImageToast(ctx, "请输入账号");
			return false;
		}
		// 正则表达式检验是否为手机号
		if (!text.matches("^[1][34578]\\d{9}$")) {
			ToastUtils.WarnImageToast(ctx, "请输入正确的手机号");
			return false;
		}
		return true;
	}



	/**
	 * 讲当前时间long值格式化为时间戳
	 * 
	 * @param millTime GMT标准long毫秒级时间值
	 * @return GMT标准秒级十位时间戳
	 */
	public static long getTimeLong(long millTime) {
		return (long) (millTime / 1000 % Math.pow(10, 10));
	}

	/**
	 *
	 * @param seconds
	 * @param formStr
	 *            例如："yyyy年MM日"
	 * @return
	 */
	public static String getDateTime(long seconds, String formStr) {
		SimpleDateFormat format = new SimpleDateFormat(formStr);
		String times = format.format(new Date(seconds * 1000));
		return times;
	}

	/**
	 * 根据long值获取格式化的年月日等字符串
	 * 
	 * @param pattern
	 *            时间显示格式
	 * @param time
	 *            秒级时间戳
	 * @return
	 */
	public static String getDateString(String pattern, long time) {
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		return sdf.format(new Date(time * 1000));
	}

	/**
	 * 根据字符串，获取秒级十位long值
	 * 
	 * @param pattern
	 *            如"yyMMdd-HHmmss"
	 * @param time
	 * @return 秒级十位时间long值
	 * @throws ParseException
	 */
	public static long getDateLong(String pattern, String time) throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		long timeLong;
		timeLong = sdf.parse(time).getTime();
		return getTimeLong(timeLong);
	}

	/**
	 * 根据年 月 获取对应的月份 天数
	 * */
	public static int getDaysByYearMonth(int year, int month) {
		Calendar a = Calendar.getInstance();
		a.set(Calendar.YEAR, year);
		a.set(Calendar.MONTH, month - 1);
		a.set(Calendar.DATE, 1);
		a.roll(Calendar.DATE, -1);
		int maxDate = a.get(Calendar.DATE);
		return maxDate;
	}

	/**
	 * 获取当前时间戳
	 * 
	 * @return GMT标准秒级十位时间戳
	 */
	public static long getNow() {
		return getTimeLong(System.currentTimeMillis());
	}

	/**
	 * 授权开始时的时间戳
	 * 
	 * @param year
	 *            (yyyy)授权开始的年份
	 * @param mouth
	 *            (MM)授权开始的月数
	 * @param day
	 *            (dd)授权开始的天数
	 * @param hour
	 *            (hh)授权开始的小时数
	 * @param minute
	 *            (mm)授权开始的分钟数
	 * @return 授权结束时的GMT秒级时间戳
	 * 
	 * @throws IllegalArgumentException
	 *             格式解析错误
	 */
	public static long getBegin(int year, int mouth, int day, int hour, int minute) {
		String str = String.valueOf(year) + checkFormatter(mouth - 1) + checkFormatter(day) + checkFormatter(hour)
				+ checkFormatter(minute);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmm");
		try {
			Date date = sdf.parse(str);
			return getTimeLong(date.getTime());
		} catch (ParseException e) {
			e.printStackTrace();
			throw new IllegalArgumentException("年月日解析错误");
		}
	}

	/**
	 * 将月日时分,格式化为2位的字符串
	 * 
	 * @param date
	 * @return
	 */
	public static String checkFormatter(int date) {
		String d;
		if (date < 10) {
			d = "0" + date;
		} else {
			d = String.valueOf(date);
		}
		return d;
	}

	/**
	 * 获取授权结束时的时间戳
	 * 
	 * @param begin
	 *            授权开始的GMT秒级时间戳
	 * @param mouth
	 *            授权时间的月数
	 * @param day
	 *            授权时间的天数
	 * @param hour
	 *            授权时间的小时数
	 * @param minute
	 *            授权时间的分钟数
	 * @return 授权结束时的GMT秒级时间戳
	 */
	public static long getEnd(long begin, int mouth, int day, int hour, int minute) {
		Calendar time = Calendar.getInstance();
		time.setTimeInMillis(begin * 1000);
		time.add(Calendar.MONTH, mouth);
		time.add(Calendar.DAY_OF_MONTH, day);
		time.add(Calendar.HOUR, hour);
		time.add(Calendar.MINUTE, minute);
		return getTimeLong(time.getTimeInMillis());
	}

	/**
	 * 获取字符串的字符长度（昵称不能超过16字符）
	 * 
	 * （ASCII英文字符占1个字符，其它占2个字符）
	 * 
	 * @return 如果text为null，则返回0。
	 */
	public static int getStringLength(String text) {
		if (TextUtils.isEmpty(text))
			return 0;
		int count = 0;
		char[] charArray = text.toCharArray();
		for (char c : charArray) {
			if (c > 255) {
				// 非ASCII编码
				count += 2;
			} else {
				// 是ASCII编码内
				count += 1;
			}
		}
		return count;
	}

}
